Typescript文档1-Get Started

https://www.typescriptlang.org/zh/docs/handbook/typescript-from-scratch.html

2023.2.19 星期日

TypeScript for the New Programmer

JavaScript 的类型化超集

不过,TypeScript 与 JavaScript 是什么关系呢?

语法
TypeScript 是 JavaScript 的 超集 :因此 JS 语法是合法的 TS。<!– 语法是指我们编写文本以组成程序的方式。例如,这段代码有一个 语法 错误,因为它缺少一个 ):

类型
但是,TypeScript 是一个 类型化 的超集,意味着它添加了针对如何使用不同类型的值的规则。

运行时行为
TypeScript 保留了 JavaScript 的 运行时行为 。原则上,TypeScript 绝不 改变 JavaScript 代码的运行时行为。

擦除类型
粗略地说,一旦 TypeScript 的编译器完成了检查代码的工作,它就会 擦除 类型以生成最终的“已编译”代码

TypeScript for JavaScript Programmers

类型推断

定义类型

JavaScript 中已经有一些基本类型可用:boolean、 bigint、 null、number、 string、 symbol 和 undefined,它们都可以在接口中使用。TypeScript 将此列表扩展为更多的内容,例如 any (允许任何类型)、unknown (确保使用此类型的人声明类型是什么)、 never (这种类型不可能发生)和 void (返回 undefined 或没有返回值的函数)。

构建类型有两种语法: 接口和类型。 你应该更喜欢 interface。当需要特定功能时使用 type 。

组合类型

有两种流行的方法可以做到这一点:联合和泛型。
#### 联合
使用联合,可以声明类型可以是许多类型中的一种。
#### 泛型
泛型为类型提供变量。一个常见的例子是数组。没有泛型的数组可以包含任何内容。带有泛型的数组可以描述数组包含的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type StringArray = Array<string>;
type NumberArray = Array<number>;
type ObjectWithNameArray = Array<{ name: string }>;

// # 声明自己使用泛型的类型
interface Backpack<Type> {
add: (obj: Type) => void;
get: () => Type;
}
// 这一行是一个简写,可以告诉 TypeScript 有一个常量,叫做`backpack`,并且不用担心它是从哪
// 里来的。
declare const backpack: Backpack<string>;
// 对象是一个字符串,因为我们在上面声明了它作为 Backpack 的变量部分。
const object = backpack.get();
// 因为 backpack 变量是一个字符串,不能将数字传递给 add 函数。
backpack.add(23);
// Argument of type 'number' is not assignable to parameter of type 'string'.

结构化的类型系统(structural type system)

TypeScript 的一个核心原则是类型检查基于对象的属性和行为(type checking focuses on the shape that values have)。

在结构化的类型系统当中,如果两个对象具有相同的结构,则认为它们是相同类型的。

knowledge is no pay,reward is kindness
0%